package message

import (
	"fmt"
	"os"
	"strconv"
	"strings"
)

// Marshall 函数用于将数据切片转换为带索引的格式
// 参数：
//   - dataSlice: 输入的字符串切片，包含需要处理的原始数据
//
// 返回：
//   - nDataSlice: 转换后的字符串切片，每个元素的格式为 "索引,数据"
func Marshall(dataSlice []string) (nDataSlice []string) {
	nDataSlice = make([]string, len(dataSlice))
	for i := 0; i < len(dataSlice); i++ {
		nDataSlice[i] = strconv.Itoa(i) + "," + dataSlice[i]
	}
	return nDataSlice
}

// Unmarshall 函数用于解析带索引格式的字符串，提取索引值和实际内容
// 参数：
//   - msg: 输入的字符串，格式为 "索引,内容" 如 "1,hello"
//
// 返回：
//   - nMsg: 提取出的实际内容
//   - index: 提取出的索引值(整数)
func Unmarshall(msg string) (nMsg string, index int) {
	qsMsg := strings.SplitN(msg, ",", 2)
	index, err := strconv.Atoi(qsMsg[0])

	if err != nil {
		fmt.Println(err)
		fmt.Fprintf(os.Stderr, "Unmarshall: failed to convert %s into int", qsMsg[0])
	}
	nMsg = qsMsg[1]
	return nMsg, index
}
